//localStorage处理封装，以支持对象的存取
//@author jiangwang
 
export default {
  KEYS:{//保存所有的key,可扩展
    TOKEN_ID: "TOKEN_ID",//认证信息
    BTN_AUTH: "BTN_AUTH",//页面按钮权限
    MENU_LIST: "MENU_LIST",//菜单列表
    WAREHOUSE_LIST: "WAREHO USE_LIST"//仓库列表
  },
 
  //添加or修改
  set(key,data){
    if(data!==null && (typeof data === 'object')){//数组or对象
      data = JSON.stringify(data);
    }
    localStorage.setItem(key,data);
  },
 
  //批量添加or修改
  setBatch(data,fields){
    if(data && data instanceof Object){//data必须是对象
      if(fields instanceof Array){//提取字段并保存
        for(let name of fields){
          if(data[name] === undefined){//提取不到时跳过
            continue;
          }
          this.set(name,data[name]);
        }
      }else if(fields instanceof Object){//提取字段并指定别名后保存，例子：data={xxx:123}, fields={xxx:"XXX"} 保存结果： XXX:123
        for(let name in fields){
          if(data[name] === undefined){
            continue;
          }
          this.set((fields[name]+''),data[name]);
        }
      }else{//fields不是数组或对象时，保存data的所有属性
       for(let name in data){
         this.set(name,data[name]);
       }
      }
    }
  },
 
  //查询
  get(key){
    const val = localStorage.getItem(key);
    if(val===null || val==='null'){
      return null;
    }else if(val==='undefined'){
      return undefined;
    }else{
      try{
        return JSON.parse(val);//解析成功说明是JSON
      }catch (e) { //解析失败按原值返回
        return val;
      }
    }
  },
 
  //局部修改-目前只支持对象
  //修改key对应对象中的部分字段，fields格式： {field1:newVal1,field2:newVal2, ...}
  //如果对象不存在，会创建一个key的对象
  //field存在则修改，不存在相当于添加了一个新的属性
  modify(key,fields){
    let obj = this.get(key);
    if(obj === null){
      obj = {};
    }
    if(obj instanceof Object && fields){
      for(let name in fields){
        obj[name] = fields[name];
      }
      this.set(key,obj);
    }
  },
 
  //删除
  //key:String/Array<String> 传递数组可删除多个
  remove(key){
    if(key instanceof Array){
      for(let k of key){
        localStorage.removeItem(k);
      }
    }else{
      localStorage.removeItem(key);
    }
  }
}